/**
 * 根据 precision（精度） 向上舍入 number。（注： precision（精度）可以理解为保留几位小数。）
 * @param number - 要向上舍入的值。
 * @param precision - 向上舍入的的精度。
 * @returns 返回向上舍入的值。
 * @example
 * ceil(4.006); // => 5
 * ceil(4.004, 2); // => 4.01
 * ceil(6040, -2); // => 6100
 */
export function ceil(number: number, precision: number = 0): number {
    if (typeof number !== 'number' || typeof precision !== 'number') {
      return NaN;
    }
    
    if (precision === 0) {
      return Math.ceil(number); // 向上取整
    }
  
    // 计算精度因子
    const factor = Math.pow(10, precision);
    
    // 向上取整计算
    const result = Math.ceil(number * factor) / factor;
    
    // Number.MAX_SAFE_INTEGER 是 JavaScript 中的一个重要常量，它表示在 JavaScript 中能够精确表示的最大安全整数。
    // 使用Number.EPSILON进行微调
    return Math.abs(result) < Number.MAX_SAFE_INTEGER 
      ? (result + Number.EPSILON) 
      : result;
}